package br.com.gerenteweb.managedBean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import br.com.gerenteweb.beans.Produto;
import br.com.gerenteweb.constant.Constantes;
import br.com.gerenteweb.daos.ProdutoDao;
import br.com.gerenteweb.interfaces.ManageBeansInterface;

/**
 * 
 * @author Felipe-
 *
 */
@ManagedBean(name = "produtoBean")
@SessionScoped
public class ProdutoBean implements Serializable, ManageBeansInterface {

	private static final long serialVersionUID = 1L;
	private Produto produto = new Produto();
	private ProdutoDao produtoDao = new ProdutoDao();
	private List<Produto> listProdutos = new ArrayList<Produto>();
	private Date dataAtual = new Date();
	private double quantidade;

	@Override
	public String adicionar() {
		try {
			produto.setDataCriacao(dataAtual);
			produto.setStatus(Constantes.ativo);
			produto.incrementarQuantidade(quantidade);
			produtoDao.add(produto);
			limpar();
			return "lista-de-produtos";
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	@Override
	public String remover() {
		try {
			Map<String, String> params = FacesContext.getCurrentInstance()
					.getExternalContext().getRequestParameterMap();
			String idProduto = params.get("idProduto");
			this.produto = produtoDao.getPorID(Long.valueOf(idProduto));

			produtoDao.remove(produto);
			limpar();
			return "lista-de-produtos";
		} catch (Exception e) {
			e.printStackTrace();
			return "lista-de-produtos";
		}
	}

	@Override
	public String carregar() {
		try {
			Map<String, String> params = FacesContext.getCurrentInstance()
					.getExternalContext().getRequestParameterMap();
			String idProduto = params.get("idProduto");

			this.produto = produtoDao.getPorID(Long.valueOf(idProduto));
			return "carregar-produto";
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "lista-de-produtos";
	}

	@Override
	public void atualizar() {
		try {
			produtoDao.update(produto);
			limpar();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	@Override
	public void listar() {
		try {
			listProdutos = produtoDao.getProdutos();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	@Override
	public void limpar() {
		this.listProdutos = new ArrayList<Produto>();
		this.produto = new Produto();
		this.produtoDao = new ProdutoDao();
		this.quantidade = 0.00;

	}

	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public ProdutoDao getProdutoDao() {
		return produtoDao;
	}

	public void setProdutoDao(ProdutoDao produtoDao) {
		this.produtoDao = produtoDao;
	}

	public List<Produto> getListProdutos() {
		listar();
		return listProdutos;
	}

	public void setListProdutos(List<Produto> listProdutos) {
		this.listProdutos = listProdutos;
	}

	public Date getDataAtual() {
		Date dataAtual = this.dataAtual;
		return dataAtual;
	}

	public void setDataAtual(Date dataAtual) {
		this.dataAtual = dataAtual;
	}

	public double getQuantidade() {
		return quantidade;
	}

	public void setQuantidade(double quantidade) {
		this.quantidade = quantidade;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((listProdutos == null) ? 0 : listProdutos.hashCode());
		result = prime * result + ((produto == null) ? 0 : produto.hashCode());
		result = prime * result
				+ ((produtoDao == null) ? 0 : produtoDao.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		ProdutoBean other = (ProdutoBean) obj;
		if (listProdutos == null) {
			if (other.listProdutos != null)
				return false;
		} else if (!listProdutos.equals(other.listProdutos))
			return false;
		if (produto == null) {
			if (other.produto != null)
				return false;
		} else if (!produto.equals(other.produto))
			return false;
		if (produtoDao == null) {
			if (other.produtoDao != null)
				return false;
		} else if (!produtoDao.equals(other.produtoDao))
			return false;
		return true;
	}

}
